<?php

/**
* -------------------------------------------------------------------------------------------------------------------
* @abstract   Commom methods for Base Controller
* @package    Kiropedic
* @subpackage Controllers
* @author     Darwing Hernández - darwing.her69@gmail.com
* -------------------------------------------------------------------------------------------------------------------
*/

class BaseController extends Controller {

  private $messages = array (
    'password.alpha_dash' =>  'El campo contraseña tiene un formato incorrecto.',
    'rpassword.required'  => 'La confirmación de contraseña es requerida.',
    'password.required'   => 'El campo contraseña es requerido.',
    'codctrl.required'    => 'El campo código de control es requerido',
    'codctrl.unique'      => 'El código de control ingresado ya se encuentra registrado.',
    'ncedula.unique'      => 'El número de cedula ingresado ya se encuentra registrado.',
    'cedula.unique'       => 'El número de cedula ingresado ya se encuentra registrado.',
    'email.unique'        => 'El correo electrónico ingresado ya se encuentra registrado.',
    'login.unique'        => 'El login ingresado ya se encuentra registrado.',
    'foto.mimes'          => 'La foto solo puede estar en formato JPEG o PNG.',
    'foto.max'            => 'La foto no debe exceder los 4MiB.',
    'required'            => 'El campo :attribute es requerido.',
    'numeric'             => 'El campo :attribute debe ser numerico.',
    'regex'               => 'El campo :attribute tiene un formato incorrecto.',
    'same'                => 'La confirmación de contraseña no coincide con la contraseña ingresada.',
    'min'                 => 'El campo :attribute debe ser mínimo de tamaño :min.'
  );

  public $validation;

  private function get_rules($option)
  {
    switch ($option) 
    {
      case CREATE_ADMIN:
        return array(
          'rpassword' => 'required|same:password',
          'password'  => 'required|alpha_dash|min:6',
          'nombre'    => "required|regex:/^[a-zA-ZáéíóúüñÁÉÍÓÚÑ ,.'-]+$/u|min:2|max:31",
          'login'     => 'required|regex:/^[a-zA-Z]{1}\w+$/|min:5|max:16',
          'email'     => 'required|regex:/^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$/|min:4'
        );
      case UPDATE_ADMIN:
        return array(
          'nombre'  => "required|regex:/^[a-zA-ZáéíóúüñÁÉÍÓÚÑ ,.'-]+$/u|min:2|max:31",
          'login'   => 'required|regex:/^[a-zA-Z]{1}\w+$/|min:5|max:16',
          'email'   => 'required|regex:/^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$/|min:4'
        );
      case CHANGE_PASS:
        return array(
          'rpassword' => 'required|same:password',
          'password'  => 'required|alpha_dash|min:6'
        );
      case CREATE_USER:
      case UPDATE_USER:
        return array(
          'telefono'  => 'required|numeric|min:11',
          'nombre'    => "required|regex:/^[a-zA-ZáéíóúüñÁÉÍÓÚÑ ,.'-]+$/u|min:2|max:31",
          'cedula'    => 'required|regex:/^[vVeEjJ]{1}\d{1,8}$/|min:2'
        );
      case CREATE_OPER:
      case UPDATE_OPER:
        return array(
          'telefono'  => 'required|numeric|min:11',
          'nombre'    => "required|regex:/^[a-zA-ZáéíóúüñÁÉÍÓÚÑ ,.'-]+$/u|min:2|max:31",
          'cedula'    => 'required|regex:/^[vVeEjJ]{1}\d{1,8}$/|min:2',
          'login'     => 'required|regex:/^[a-zA-Z]{1}\w+$/|min:5|max:16',
          'email'     => 'required|regex:/^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$/|min:4',
          'foto'      => 'mimes:jpeg,png|max:4000',
        );
      case CREATE_SERV:
      case UPDATE_SERV:
        return array(
          'codctrl' => "required|regex:/^[a-zA-Z]+$/u|min:4|max:9",
          'descrip' => "regex:/^[a-zA-ZáéíóúüñÁÉÍÓÚÑ ,.'-]+$/u|max:201",
          'nombre'  => "required|regex:/^[a-zA-ZáéíóúüñÁÉÍÓÚÑ ,.'-]+$/u|min:2|max:31",
          'precio'  => 'required|numeric',
        );
      case CREATE_PROD:
      case UPDATE_PROD:
        return array(
          'codctrl' => "required|regex:/^[a-zA-Z]+$/u|min:4|max:9",
          'descrip' => "regex:/^[a-zA-ZáéíóúüñÁÉÍÓÚÑ ,.'-]+$/u|max:201",
          'nombre'  => "required|regex:/^[a-zA-ZáéíóúüñÁÉÍÓÚÑ ,.'-]+$/u|min:2|max:31",
          'precio'  => 'required|numeric',
          'stock'   => 'required|numeric'
        );
      case CREATE_USER_KIR:
        return array(
          'nombre'    => "required|regex:/^[a-zA-ZáéíóúüñÁÉÍÓÚÑ ,.'-]+$/u|min:2|max:31",
          'cedula'    => 'required|numeric|min:1',
          'ncedula'   => 'unique:user_usr,usr_rifci',
          'telefono'  => 'required|numeric|min:11'
        );
      default: return array(); break;
    }
  }

  /**
   * Setup the layout used by the controller.
   *
   * @return void
   */
  protected function setupLayout()
  {
    if ( ! is_null($this->layout))
    {
      $this->layout = View::make($this->layout);
    }
  }

  /**
  *
  */
  public function __call($method, $parameters)
  {
    return Response::error('404');
  }

  /**
  *
  */
  public function __construct()
  {
    // to pass data to views
    $this->data = new StdClass;
    
    // Should verify Session user information (admin)
  }

  public function validate($input, $option, $index = null, $values = null)
  {
    $rules = $this->get_rules($option);

    if($index)
      for($i = 0; $i < count($index); $i++)
        $rules[$index[$i]] .= '|'.$values[$i];

    $this->validation = Validator::make($input, $rules, $this->messages);

    return $this->validation->passes();
  }
}